﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Entity;

namespace DAL.Persistencia
{
    public class ClienteDAL
    {

        NewTierraEntities Con;

        public ClienteDAL()
        {
            Con = new NewTierraEntities();
        }

        public void Salvar(Cliente c)
        {
            try
            {
                Con.AddToClientes(c);
                Con.SaveChanges();
            }
            catch 
            {
                throw;
            }
        }

        public void Excluir(Cliente c)
        {
            try
            {
                Con.DeleteObject(c);
                Con.SaveChanges();
            }
            catch 
            {
                throw;
            }
        }

        public Cliente ObterPorId(int IdCliente)
        {
            try
            {
                return Con.Clientes.Where(c => c.Cliente_id == IdCliente).SingleOrDefault();
            }
            catch 
            {
                throw;
            }
        }

        public void Atualizar(Cliente novo)
        {
            Cliente antigo = ObterPorId(novo.Cliente_id);

            antigo.Cliente_nome = novo.Cliente_nome;
            antigo.Cliente_endereco = novo.Cliente_endereco;
            antigo.Cliente_http = novo.Cliente_http;
            antigo.Cliente_email = novo.Cliente_email;
            antigo.Cliente_cep = novo.Cliente_cep;
            antigo.Cliente_telefone = novo.Cliente_telefone;
            antigo.Cliente_fax = novo.Cliente_fax;
            antigo.Cliente_since = novo.Cliente_since;
            antigo.Representante_id = novo.Representante_id;
            antigo.Mercado_id = novo.Mercado_id;
            antigo.BaseTarifaria_id = novo.BaseTarifaria_id;
            antigo.CentroCusto_id = novo.CentroCusto_id;
            antigo.PAIS_id = novo.PAIS_id;
            antigo.CID_id = novo.CID_id;

            Con.SaveChanges();
        }

        public Cliente ObterPorNome(string nome)
        {
            try
            {
                var query = (from c in Con.Clientes
                             join m in Con.Mercadoes on c.Mercado_id equals m.Mercado_id
                             join b in Con.BaseTarifarias on c.BaseTarifaria_id equals b.BaseTarifaria_id
                             join cc in Con.Centro_Custo on c.CentroCusto_id equals cc.CentroCusto_id
                             where c.Cliente_nome.Equals(nome)
                             select c).SingleOrDefault();

                return query;
            }
            catch 
            {
                throw;
            }
        }

        public bool VerificaRepresentante(int IdCliente)
        {
            try
            {
                return Con.Clientes.Where(c => c.Representante_id == IdCliente).Count() != 0;
            }
            catch 
            {
                throw;
            }
        }

    }
}
